/*
 * Copyright 2020 eBlocker Open Source UG (haftungsbeschraenkt)
 *
 * Licensed under the EUPL, Version 1.2 or - as soon they will be
 * approved by the European Commission - subsequent versions of the EUPL
 * (the "License"); You may not use this work except in compliance with
 * the License. You may obtain a copy of the License at:
 *
 *   https://joinup.ec.europa.eu/page/eupl-text-11-12
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
export default {
    templateUrl: 'app/components/pause/pause.component.html',
    controller: PauseController,
    controllerAs: 'ctrl'
};

function PauseController($mdDialog, $timeout, logger, DeviceService, ConsoleService, ControlbarService) {
    'ngInject';
    'use strict';

    const vm = this;

    let pauseStatus, isShowDialog, doNotShowAgain;
    let dashboardPauseUrl = ConsoleService.getDashboardPausedUrl();

    vm.handleClick = handleClick;
    vm.showDialog = showDialog;

    function handleClick() {
        if (showDialog()) {
            openPauseConfirmationDialog().then(
                function ok(isNotShowAgain) {
                    let showPauseAgain = !isNotShowAgain;
                    updatePauseDialogDoNotShowAgainFlag(isNotShowAgain);
                    updateShowPauseDialog(showPauseAgain);
                    $timeout(ControlbarService.closeControlbar, 1000);
                }, function cancel(isNotShowAgain) {
                    updatePauseDialogDoNotShowAgainFlag(isNotShowAgain);
                });
        } else {
            ConsoleService.goToPausedDashboard(false);
            // $timeout(ControlbarService.closeControlbar, 1000);
        }
    }

    function updateShowPauseDialog(bool) {
        DeviceService.updateShowPauseDialogFlag(bool).then(function success() {
            isShowDialog = bool;
        });
    }

    function updatePauseDialogDoNotShowAgainFlag(bool) {
        DeviceService.updatePauseDialogDoNotShowAgainFlag(bool).then(function success() {
            doNotShowAgain = bool;
        });
    }

    function showDialog() {
        return (angular.isDefined(isShowDialog) && isShowDialog) &&
            (!angular.isObject(pauseStatus) || (angular.isObject(pauseStatus) && pauseStatus.pausing <= 0));
    }

    function getPauseStatus() {
        DeviceService.getPauseStatus().then(function success(response) {
            pauseStatus = response.data;
        });
    }

    function getShowPauseDialogFlag() {
        DeviceService.getShowPauseDialogFlag().then(function success(response) {
            isShowDialog = response.data;
        });
    }

    function getDoNotShowAgainFlag() {
        DeviceService.getPauseDialogDoNotShowAgainFlag().then(function success(response) {
            doNotShowAgain = response.data;
        });
    }

    function openPauseConfirmationDialog() {
        return $mdDialog.show({
            controller: 'PauseConfirmationDialogController',
            controllerAs: 'ctrl',
            templateUrl: 'app/dialogs/pause/pause-confirmation.dialog.html',
            parent: angular.element(document.body),
            clickOutsideToClose: false,
            locals: {
                doNotShowAgain: doNotShowAgain,
                dashboardPauseUrl: dashboardPauseUrl
            }
        });
    }

    getPauseStatus();
    getShowPauseDialogFlag();
    getDoNotShowAgainFlag();
}
